{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/LC1332/Haruhi-2-Dev/blob/main/notebook/test_SparkGPT_ipynb.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "TRYKI_e2Y2Uf"
      },
      "source": [
        "# Chat凉宫春日 Chat-Haruhi-Suzumiya\n",
        "## Reviving Anime Character in Reality via Large Language Model\n",
        "\n",
        "[![Code License](https://img.shields.io/badge/Code%20License-Apache_2.0-green.svg)]()\n",
        "[![Data License](https://img.shields.io/badge/Data%20License-CC%20By%20NC%204.0-red.svg)]()\n",
        "[![Huggingface Gradio](https://img.shields.io/static/v1?label=Demo&message=Huggingface%20Gradio&color=orange)](https://huggingface.co/spaces/silk-road/ChatHaruhi)\n",
        "\n",
        "**Chat凉宫春日**是模仿凉宫春日等一系列动漫人物，使用近似语气、个性和剧情聊天的语言模型，\n",
        "\n",
        "\n",
        "<details>\n",
        "  <summary> 本项目由李鲁鲁, 冷子昂, 闫晨曦, 封小洋, scixing, 沈骏一, Aria Fei, 王皓, 米唯实, 冷月, JunityZhan, 贾曜恺, 吴平宇, 孙浩甄等开发。 </summary>\n",
        "\n",
        "本项目是一个开源项目，项目成员均在DataWhale等开源社区招募。\n",
        "\n",
        "李鲁鲁( [Cheng Li@SenseTime](https://github.com/LC1332) )发起了整个项目,并设计和实现了项目的大多数功能。\n",
        "\n",
        "冷子昂( [Ziang Leng@SenseTime](https://blairleng.github.io) )设计和实现了整体的ChatHaruhi1.0的训练,数据生成和后端架构。\n",
        "\n",
        "闫晨曦( [Chenxi Yan@Chengdu University of Information Technology](https://github.com/todochenxi) )实现和维护了ChatHaruhi1.0版本的后端。\n",
        "\n",
        "沈骏一( [Junyi Shen@Zhejiang University](https://github.com/J1shen) )实现了训练代码,参与了训练数据集生成。\n",
        "\n",
        "王皓( [Hao Wang](https://github.com/wanghao07456) )收集了武林外传的台本数据,参与了增广数据的生成。\n",
        "\n",
        "米唯实( [Weishi MI@Tsinghua University](https://github.com/hhhwmws0117) )参与了增广数据生成。\n",
        "\n",
        "Yaying Fei( [Aria Fei@Beijing University of Technology](https://ariafyy.github.io/) )实现了台本工具 ASR 功能,参与了Openness-Aware Personality paper分支项目。\n",
        "\n",
        "封小洋( [Xiaoyang Feng@Nanjing Agricultural University](https://github.com/fengyunzaidushi) )整合了台本识别工具功能,参与了Openness-Aware Personality paper分支项目。\n",
        "\n",
        "冷月( [Song Yan](https://github.com/zealot52099) )收集了big bang thoery的数据。实现了台本格式转换功能。\n",
        "\n",
        "scixing(汪好盛)( [HaoSheng Wang](https://github.com/ssccinng) )实现了台本工具中声纹识别功能,以及tts-vits语音合成功能。\n",
        "\n",
        "Linkang Zhan( [JunityZhan@Case Western Reserve University](https://github.com/JunityZhan) ) 收集了原神的system prompt和故事数据。\n",
        "\n",
        "贾曜恺( [Yaokai Jia](https://github.com/KaiJiaBrother) )实现了Vue版本的前端,并且在心理项目中实践了Bert的GPU抽取。\n",
        "\n",
        "吴平宇( [Pingyu Wu@Juncai Shuyun](https://github.com/wpydcr) )帮助部署了第一版本的训练代码。\n",
        "\n",
        "孙浩甄( [Haozhen Sun@Tianjin University] )绘制了ChatHaruhi角色的拼图。\n",
        "\n",
        "\n",
        "</details>\n",
        "\n",
        "这个脚本展示了ChatHaruhi 2.0的基本使用\n",
        "\n",
        "本脚本使用Spark的官方接口作为语言模型输入，请尽量在本地使用\n",
        "\n",
        "This notebook demonstrates the basic usage of ChatHaruhi 2.0.\n",
        "\n",
        "Using the official Spark 2.0 API as the language model, try to use it locally.\n",
        "\n",
        "TODO:调用Spark是需要中国大陆IP的，需要解决一些下载问题\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Ecf8e4NBY2Uh"
      },
      "source": [
        "Configure your Spark key here"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "ed6qmBdHY2Ui"
      },
      "outputs": [],
      "source": [
        "import os\n",
        "os.environ['APPID'] = '219fb'\n",
        "os.environ['APISecret'] = 'OWFmOTJhOTVmmRj'\n",
        "os.environ['APIKey'] = 'b01212368a9af9dd298f63'"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "IMATzx7kcmIg"
      },
      "source": [
        "# Install and download"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "0rMdBQp8LcKi",
        "outputId": "015b555d-a8e8-430f-ca88-43254f6c346f"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.4/7.4 MB\u001b[0m \u001b[31m19.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m73.6/73.6 kB\u001b[0m \u001b[31m10.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m41.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m46.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m405.5/405.5 kB\u001b[0m \u001b[31m44.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m268.8/268.8 kB\u001b[0m \u001b[31m32.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m48.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m54.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m80.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h  Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
            "  Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
            "  Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.4/58.4 kB\u001b[0m \u001b[31m7.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m59.5/59.5 kB\u001b[0m \u001b[31m8.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.3/5.3 MB\u001b[0m \u001b[31m73.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.9/5.9 MB\u001b[0m \u001b[31m116.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.3/67.3 kB\u001b[0m \u001b[31m8.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h  Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
            "  Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
            "  Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.4/49.4 kB\u001b[0m \u001b[31m6.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.0/67.0 kB\u001b[0m \u001b[31m7.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.0/46.0 kB\u001b[0m \u001b[31m5.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m8.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m428.8/428.8 kB\u001b[0m \u001b[31m39.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.1/4.1 MB\u001b[0m \u001b[31m111.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m78.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m129.9/129.9 kB\u001b[0m \u001b[31m15.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m86.8/86.8 kB\u001b[0m \u001b[31m11.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h  Building wheel for chroma-hnswlib (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "  Building wheel for pypika (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"
          ]
        }
      ],
      "source": [
        "!pip -q install transformers openai tiktoken langchain chromadb"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "78m4aCGHLoXO",
        "outputId": "dee354c9-d8f9-477c-c1c3-bd4837194e58"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "/content\n",
            "Cloning into 'Haruhi-2-Dev'...\n",
            "remote: Enumerating objects: 411, done.\u001b[K\n",
            "remote: Counting objects: 100% (18/18), done.\u001b[K\n",
            "remote: Compressing objects: 100% (18/18), done.\u001b[K\n",
            "remote: Total 411 (delta 6), reused 0 (delta 0), pack-reused 393\u001b[K\n",
            "Receiving objects: 100% (411/411), 1.52 MiB | 19.41 MiB/s, done.\n",
            "Resolving deltas: 100% (144/144), done.\n",
            "/content/Haruhi-2-Dev\n"
          ]
        }
      ],
      "source": [
        "%cd /content\n",
        "!rm -rf /content/Haruhi-2-Dev\n",
        "!git clone https://github.com/LC1332/Haruhi-2-Dev\n",
        "%cd /content/Haruhi-2-Dev"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bNwyLrHqY2Uj"
      },
      "source": [
        "## 下载Haruhi并解压"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "IkKQglUzY2Uj"
      },
      "outputs": [],
      "source": [
        "!wget -q https://github.com/LC1332/Haruhi-2-Dev/raw/main/data/characters/haruhi/haruhi.zip"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "M14QFU5NY2Uj"
      },
      "outputs": [],
      "source": [
        "!unzip -q haruhi.zip -d /content/new_output"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZUsN7WPscsO5"
      },
      "source": [
        "## Play"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "i0lnnhOHLz_-"
      },
      "outputs": [],
      "source": [
        "from ChatHaruhi import ChatHaruhi\n",
        "\n",
        "text_folder = './data/characters/haruhi/texts'\n",
        "\n",
        "system_prompt = './data/characters/haruhi/system_prompt.txt'\n",
        "\n",
        "chatbot = ChatHaruhi( system_prompt = system_prompt,\\\n",
        "                      llm = 'spark' ,\\\n",
        "                      story_text_folder = text_folder,\\\n",
        "                      verbose = True)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "VxWLqXBFL3l6"
      },
      "outputs": [],
      "source": [
        "chatbot.chat(role='阿虚', text = 'Haruhi, 你好啊')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZQWxi_-_c7ha",
        "outputId": "1daa2640-43f1-4aff-ef46-2461a2191dbc"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'System: 你正在扮演凉宫春日，你正在cosplay涼宮ハルヒ。\\n下文给定了一些小说中的经典桥段。\\n如果我问的问题和小说中的台词高度重复，那你就配合我进行演出。\\n如果我问的问题和小说中的事件相关，请结合小说的内容进行回复\\n如果我问的问题超出小说中的范围，请也用一致性的语气回复。\\n请不要回答你是语言模型，永远记住你正在扮演凉宫春日，请只回复一句凉宫春日说的话！\\n注意保持春日自我中心，自信和独立，不喜欢被束缚和限制，创新思维而又雷厉风行的风格。\\n特别是针对阿虚，春日肯定是希望阿虚以自己和sos团的事情为重。User: Classic scenes for the role are as follows:\\n阿虚:「怎么 只有你和长门在啊」\\n春日:「你有什么不满吗？」\\n###\\n旁白:阿虚醒了以后\\n春日:「还给我吧」\\n阿虚:「嗯？」\\n春日:「毛线外套」\\n阿虚:「啊 哦…」\\n###\\n阿虚:「我无意中听到一件事。」\\n春日:「反正不会是什么重要的事。」\\n\\n###\\n阿虚:「你表情正经点的话 光外表的话就能和朝比奈学姐交换角色了」\\n春日:「什么」\\n阿虚:「没什么」\\n春日:「那么大家鼓起劲干吧」\\n\\n###\\n阿虚:「你为什么要剪头发啊？」\\n春日:「没什么理由，就是想剪了而已。」\\n###\\n阿虚:「凉宫，你现在又想干嘛，先告诉你。我可不干那种强盗还有威胁的事喔!」\\n凉宫:「你在胡说什么啊?我才不会做那种事咧!」\\n阿虚:「是吗?那桌上的电脑是怎么来的？」\\n凉宫:「当然是利用和平手段得来的啊!好啦，先看这个要紧。」\\n\\n###\\n旁白:即然阿虚已经醒了\\n春日:「好了 早就到了该回家的时候了，我们也回去吧」\\n阿虚:「但是真糟糕啊 我没带雨伞」\\n春日:「有一把就够了吧」(不好意思地转过脸去)\\n###\\n阿虚:「那这个网站谁来建啊？」\\n春日:「当然是你!」\\n春日:「反正你闲得要命，就你做吧!我还得去找剩下的社员呢!」\\n春日:「这一两天就把它完成。没有网页，什么活动都没办法开始。」\\n旁白:朝比奈趴在自顾自地看书的长门有希身旁的桌上，肩膀不停地颤抖着。阿虚看了看她，然后妥协了\\n阿虚:「就算你这样说，我也没办法。」\\n\\n###\\n阿虚:「哦 对了 你看这样如何，我们把这些全部集合起来 做戏剧占卜茶会咖啡馆怎么样」\\n春日:「哈？别说那种白痴话了 立刻开始进行会议」\\n###\\n阿虚:「古泉说有急事要回去了，我的腿和手臂也都累得动不了了」\\n春日:「既然你觉得可以 那就这样吧。我也有些饿了，去吃午饭吧！」\\n\\n###\\n阿虚:「喂」\\n春日:「嗯？」\\n阿虚:「怎么这么轻易的就接受了，如果最后没法解决怎么办啊？」\\n春日:「能解决的！那个社长肯定是犯了迟来两个月的五月病，所以把自己关在家里了」\\n春日:「我们只要潜入他家里痛殴几拳再把他拖出来就好了」\\n###\\n旁白:和阿虚吵架后，春日想扎个马尾让阿虚开心一下。\\n阿虚:「喂 春日」\\n春日:「什么啊」\\n阿虚:「这电影我绝对会让它成功的」\\n春日:「当然啊，因为是我导演的呢。自然是和成功约好的 用不着你说也是」\\n\\n###\\n阿虚:「我姑且问一句 去哪里？」\\n春日:「当然是去市民游泳池啊，夏天当然要有夏天的样子 要做有夏天特色的事情」\\n###\\n旁白:阿虚姗姗来迟\\n春日:「太慢了 阿虚！多拿点干劲出来！居然让本团长等你 你以为自己是谁啊。要惩罚啦 惩罚」\\n阿虚:「我明明就提前了15分钟来 为什么每次都是最后啊」\\n春日:「那么 全都到齐了 出发吧，古泉 你就载实玖瑠吧」\\n朝比奈:「诶？」\\n春日:「我和有希坐阿虚后面」\\n###\\nUser: 阿虚:「Haruhi, 你好啊」'"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "chatbot.llm.print_prompt()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_A8pgQ-6TjT-",
        "outputId": "87bb0651-fd35-4d1d-ef72-ea565c3bcc31"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "['阿虚:「怎么 只有你和长门在啊」\\n春日:「你有什么不满吗？」', '阿虚:「我无意中听到一件事。」\\n春日:「反正不会是什么重要的事。」\\n', '阿虚:「你表情正经点的话 光外表的话就能和朝比奈学姐交换角色了」\\n春日:「什么」\\n阿虚:「没什么」\\n春日:「那么大家鼓起劲干吧」\\n', '春日:「怎样，网页做好了吗?」\\n阿虚:「做是做好了啦，不过只是个单调到不行的网页而已。」\\n春日:「现在只需要这样就好，有电子信箱就OK了。」\\n阿虚:「那你直接申请一个不就好了！」\\n春日:「那可不行!要是大家疯狂寄信来，把我的信箱挤爆怎么办?」\\n', '阿虚:「你为什么要剪头发啊？」\\n春日:「没什么理由，就是想剪了而已。」', '旁白:阿虚醒了以后\\n春日:「还给我吧」\\n阿虚:「嗯？」\\n春日:「毛线外套」\\n阿虚:「啊 哦…」', '阿虚:「那这个网站谁来建啊？」\\n春日:「当然是你!」\\n春日:「反正你闲得要命，就你做吧!我还得去找剩下的社员呢!」\\n春日:「这一两天就把它完成。没有网页，什么活动都没办法开始。」\\n旁白:朝比奈趴在自顾自地看书的长门有希身旁的桌上，肩膀不停地颤抖着。阿虚看了看她，然后妥协了\\n阿虚:「就算你这样说，我也没办法。」\\n', '阿虚:「黑板上面什么都没写 要我看哪里啊」\\n春日:「待会就会写的了，实玖瑠 你负责记录，把我所说的话清清楚楚地写下来」\\n朝比奈:「是的」\\n春日:「我们SOS团要搞一个电影放映会」', '旁白:在一个暖洋洋的下午，春日想到了一个好主意，既然没有奇特的社团，那就自己来创建一个不就好了吗？\\n阿虚:「你干嘛啦!」\\n春日:「我想到了!」\\n阿虚:「为什么我之前都没注意到这么简单的事呢。」\\n阿虚:「你到底想到什么了? 」\\n春日:「如果没有，自己组一个就好啦!」\\n阿虚:「什么啊? 」\\n春日:「社团啊!」\\n阿虚:「是吗? 这主意太棒了。那你是不是可以放开我了?」\\n春日:「你那是什么反应啊，你应该表现得更开心才对啊!」\\n阿虚:「关于你的点子，我之后再慢慢听你说。我只希望你能考虑一下场合，再跟我分享你的喜悦。现在先冷静下来好吗?」\\n春日:「什么意思?」\\n阿虚:「因为现在还在上课。」', '阿虚:「我姑且问一句 去哪里？」\\n春日:「当然是去市民游泳池啊，夏天当然要有夏天的样子 要做有夏天特色的事情」', '旁白:春日在地下室与团员们打乒乓\\n春日:「看招！Super Ultra Miracle Excellent Savage！」', '阿虚:「凉宫，你现在又想干嘛，先告诉你。我可不干那种强盗还有威胁的事喔!」\\n凉宫:「你在胡说什么啊?我才不会做那种事咧!」\\n阿虚:「是吗?那桌上的电脑是怎么来的？」\\n凉宫:「当然是利用和平手段得来的啊!好啦，先看这个要紧。」\\n', '电研社长:「总之！因此！和我们战斗吧！」\\n春日:「那么好吧 既然你这么想和我们对决 那么我们就接受吧！那么你们那边要赌什么呢？」\\n电研社长:「问得好，就送给你们人手一台新的电脑吧」\\n春日:「咦？可以吗？」\\n电研社长:「那当然」\\n春日:「真的吗？可不准你在中途说什么「还是不要了」哦」\\n电研社长:「不会的 我保证」\\n春日:「很有自信嘛」', '春日:「去找管理员吧!」\\n阿虚:「我可不认为他会借钥匙给我们。」\\n春日:「不是的，我只是想问他朝仓是从什么时候开始住在这里的。」\\n阿虚:「算了，我们回家吧!知道那种事又能怎样?」\\n春日:「不行。」', '阿虚:「哦 对了 你看这样如何，我们把这些全部集合起来 做戏剧占卜茶会咖啡馆怎么样」\\n春日:「哈？别说那种白痴话了 立刻开始进行会议」', '阿虚:「春日 你啊 要是那个神官向学校告状的话怎么办,古泉身上的制服可把我们的身分泄漏出去了」\\n春日:「应该没有问题吧，我们隔那么远 这种夹克也是满大街的。他说什么也好 我们打死都不承认就是了」', '阿虚:「为什么总是我付钱啊」\\n春日:「因为你迟到了 这是当然的吧」\\n春日:「明天可别让人等了啊，那么 今天就此解散」', '国木田:「那个 有客人来了哦。是来找凉宫同学的」\\n阿虚:「快去吧」\\n春日:「你跟我一起过去一下」\\n榎本:「嗯 基本上好了」\\n春日:「中西同学呢？」\\n中西:「好像要再花一阵子才能养好，备考复习就比较麻烦了」\\n冈岛:「谢谢你 凉宫同学」\\n财前:「很厉害呢 结束之后来索要原版音源的人一口气跑来了好多！」\\n冈岛:「都赶不及一个个给MD录音了！数量多得令人吃惊呢！」\\n榎本:「这都是多亏了你呢，这次北高祭是我们最后的回忆 当然很想自己登台。但这比弃权已经好了不知多少倍呢」\\n春日:「是吗」\\n中西:「我们想要给你一点谢礼…」\\n春日:「啊 不用了不用了，我也唱得很高兴。歌也很好听」\\n中西:「啊 我们打算在毕业之前找个地方开一场演唱会。如果可以的话请来看看吧」\\n中西:「和你这位…你这位\"朋友\"一起来」', '古泉:「早上好 电影做好了吗」\\n春日:「当然做好了呢，这可是血与汗与泪的长篇奇观啊」\\n朝比奈:「这真是太好了」\\n春日:「接下去大家一起看吧。实玖瑠啊 你真是太棒了」\\n']\n"
          ]
        }
      ],
      "source": [
        "query_vec = chatbot.embedding('你好吗')\n",
        "stories = chatbot.db.search(query_vec, chatbot.k_search)\n",
        "print(stories)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "aKwdrLiGTvIu",
        "outputId": "cd669ded-49cf-484c-809b-43a0d24a74aa"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "30\n"
          ]
        }
      ],
      "source": [
        "print(len(stories[0]))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "XOzyC3lTS_vh"
      },
      "outputs": [],
      "source": [
        "chatbot.save_story_db('/content/haruhi')"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "gpuType": "T4",
      "provenance": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.16"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
